package gepes.dao;

import gepes.exepcion.DAOExcepcion;
import gepes.modelo.Categoria;
import gepes.modelo.ProfesorCategoria;
import gepes.modelo.Usuario;
import gepes.util.Conexion;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Logger;

import javax.imageio.ImageIO;

public class ProfesorCategoriaDAO extends Base {

	public void eliminar(int codCategoria, int codUsuario) throws DAOExcepcion {
		String query = "delete from profesorcategoria "
				+ "WHERE codcategoria=? and codprofesor=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = Conexion.ConectarDB();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, codCategoria);
			stmt.setInt(2, codUsuario);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public int existe(int codCategoria, int codUsuario) throws DAOExcepcion {
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select count(0) from profesorcategoria where "
					+ " codprofesor=? and codcategoria=?";
			con = Conexion.ConectarDB();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, codUsuario);
			stmt.setInt(2, codCategoria);
			rs = stmt.executeQuery();
			if (rs.next()) {
				return rs.getInt(1);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return 0;
	}

	public ProfesorCategoria obtener(int codCategoria, int codUsuario)
			throws DAOExcepcion {
		ProfesorCategoria vo = new ProfesorCategoria();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select pc.codprofesorcategoria,pc.codcategoria,c.descripcion,"
					+ " pc.estado "
					+ " from profesorcategoria pc inner join usuario u on "
					+ " pc.codprofesor=u.codusuario inner join "
					+ " categoria c on pc.codcategoria=c.codcategoria "
					+ " where pc.codcategoria=? and pc.codprofesor=?";
			con = Conexion.ConectarDB();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, codCategoria);
			stmt.setInt(2, codUsuario);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setCodProfesorCategoria(rs.getInt(1));
				vo.setCategoria(new Categoria(rs.getInt(2), rs.getString(3),
						true));
				vo.setEstado(rs.getInt(4) == 1 ? true : false);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public ProfesorCategoria insertar(ProfesorCategoria vo) throws DAOExcepcion {
		String query = "insert into profesorcategoria(codprofesor,codcategoria,"
				+ "estado,fechareg,usuarioreg) "
				+ " values(?,?,"
				+ "1,now(),?)";

		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = Conexion.ConectarDB();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getProfesor().getCodUsuario());
			stmt.setInt(2, vo.getCategoria().getCodCategoria());
			stmt.setString(3, vo.getUsuarioReg());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("Error insertar");
			}
			int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			vo.setCodProfesorCategoria(id);

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
}
